package Thread.Safe;

/**
 * synchronized修饰成员方法
 */
public class Reentrant {
    private class Counter{
        int val;
        //当前synchronized锁的是Counter对象
        synchronized void increase(){
            val++;
        }
        ///前synchronized锁的是Counter对象
        synchronized void increase1(){
            //相当于对同一个Counter对象加了两次锁
            //当线程1进入increase1后，如果不支持可重入，那么线程1进入increase1里面的increase方法就要再次获取锁
            //此时线程1就会拿着Counter对象锁的线程阻塞在这里，等线程1自己释放锁之后再进入increase()
            //此时这个程序就陷入了死循环，就变成了死锁
            increase();
        }
    }
}
